#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
AI 分析结果格式化脚本
用于将原始的 AI 分析文本格式化为结构化的 JSON 数据
"""

import re
import json


def parse_ai_analysis(text):
    """
    解析 AI 分析文本，提取结构化数据
    
    Args:
        text: 原始 AI 分析文本
        
    Returns:
        dict: 格式化后的结构化数据
    """
    result = {
        "symbol": "",
        "timeframe": "",
        "trend": {
            "direction": "",
            "description": "",
            "reasons": []
        },
        "currentPrice": {
            "price": "",
            "change": "",
            "status": ""
        },
        "tradingAdvice": {
            "direction": "",
            "plans": []
        },
        "riskWarnings": []
    }
    
    # 提取交易对和周期
    symbol_match = re.search(r'###([A-Z]+/[A-Z]+)(\d+[^\s]+)周期分析', text)
    if symbol_match:
        result["symbol"] = symbol_match.group(1)
        result["timeframe"] = symbol_match.group(2)
    
    # 提取趋势信息
    trend_match = re.search(r'####趋势：([^（]+)（([^）]+)）', text)
    if trend_match:
        result["trend"]["direction"] = trend_match.group(1).strip()
        result["trend"]["description"] = trend_match.group(2).strip()
    
    # 提取趋势理由
    reasons_section = re.search(r'理由：(.*?)####现价', text, re.DOTALL)
    if reasons_section:
        reasons_text = reasons_section.group(1)
        # 修改正则，匹配到下一个 -** 或结束
        reasons = re.findall(r'-\*\*([^*]+)\*\*：((?:(?!-\*\*).)+)', reasons_text, re.DOTALL)
        result["trend"]["reasons"] = [
            {
                "title": reason[0].strip(),
                "content": reason[1].strip()
            }
            for reason in reasons
        ]
    
    # 提取现价信息
    price_match = re.search(r'####现价：([\d.]+)（\*\*([^*]+)\*\*([^）]+)）', text)
    if price_match:
        result["currentPrice"]["price"] = price_match.group(1)
        result["currentPrice"]["change"] = price_match.group(2)
        result["currentPrice"]["status"] = price_match.group(3).strip()
    
    # 提取交易建议方向
    direction_match = re.search(r'-\*\*方向\*\*：([^-\n]+)', text)
    if direction_match:
        result["tradingAdvice"]["direction"] = direction_match.group(1).strip()
    
    # 提取交易方案
    plans = []
    # 使用更精确的正则匹配每个方案块
    plan_pattern = r'\d+\.\*\*方案(\d+)（([^）]+)）\*\*：(.*?)(?=\d+\.\*\*方案|####风险提示|$)'
    plan_matches = re.finditer(plan_pattern, text, re.DOTALL)

    for plan_match in plan_matches:
        plan_num = plan_match.group(1)
        plan_type = plan_match.group(2)
        plan_content = plan_match.group(3)

        plan = {
            "id": int(plan_num),
            "type": plan_type,
            "entryPrice": "",
            "targets": [],
            "stopLoss": "",
            "stopLossReason": "",
            "trigger": ""
        }

        # 提取入场价（可能包含范围或说明）
        entry_match = re.search(r'-\*\*入场价\*\*:([^\n-]+)', plan_content)
        if entry_match:
            entry_text = entry_match.group(1).strip()
            # 移除可能的括号说明
            entry_text = re.sub(r'（[^）]*）', '', entry_text)
            plan["entryPrice"] = entry_text.strip()

        # 提取所有目标价位
        target_matches = re.finditer(r'-\*\*目标(\d+)（([^）]+)）\*\*:([^-]+?)(?=-\*\*(?:目标|止损)|$)', plan_content, re.DOTALL)
        for target_match in target_matches:
            plan["targets"].append({
                "level": int(target_match.group(1)),
                "time": target_match.group(2),
                "price": target_match.group(3).strip()
            })

        # 提取止损价
        stop_match = re.search(r'-\*\*止损价\*\*:([^（]+)（([^）]+)）', plan_content)
        if stop_match:
            plan["stopLoss"] = stop_match.group(1).strip()
            plan["stopLossReason"] = stop_match.group(2).strip()

        # 提取触发条件
        trigger_match = re.search(r'-\*\*触发条件\*\*:([^。]+。)', plan_content)
        if trigger_match:
            plan["trigger"] = trigger_match.group(1).strip()

        plans.append(plan)

    result["tradingAdvice"]["plans"] = plans
    
    # 提取风险提示
    risk_section = re.search(r'####风险提示：(.*?)(?=（如需|$)', text, re.DOTALL)
    if risk_section:
        risk_text = risk_section.group(1)
        # 修改正则，更准确地匹配风险项
        risks = re.findall(r'\d+\.\*\*([^*]+)\*\*：([^。]+。)', risk_text)
        result["riskWarnings"] = [
            {
                "title": risk[0].strip(),
                "content": risk[1].strip()
            }
            for risk in risks
        ]
    
    return result


def format_output(data):
    """
    格式化输出为易读的文本
    
    Args:
        data: 结构化数据
        
    Returns:
        str: 格式化后的文本
    """
    output = []
    
    # 标题
    output.append("=" * 60)
    output.append(f"📊 {data['symbol']} {data['timeframe']}周期分析")
    output.append("=" * 60)
    output.append("")
    
    # 趋势分析
    output.append("📈 趋势分析")
    output.append("-" * 60)
    output.append(f"方向: {data['trend']['direction']}")
    output.append(f"描述: {data['trend']['description']}")
    output.append("")
    output.append("理由:")
    for i, reason in enumerate(data['trend']['reasons'], 1):
        output.append(f"  {i}. {reason['title']}")
        output.append(f"     {reason['content']}")
    output.append("")
    
    # 现价信息
    output.append("💰 现价信息")
    output.append("-" * 60)
    output.append(f"价格: {data['currentPrice']['price']}")
    output.append(f"涨跌: {data['currentPrice']['change']}")
    output.append(f"状态: {data['currentPrice']['status']}")
    output.append("")
    
    # 交易建议
    output.append("💡 交易建议")
    output.append("-" * 60)
    output.append(f"方向: {data['tradingAdvice']['direction']}")
    output.append("")
    
    for plan in data['tradingAdvice']['plans']:
        output.append(f"方案 {plan['id']} - {plan['type']}")
        output.append(f"  入场价: {plan['entryPrice']}")
        output.append(f"  目标价位:")
        for target in plan['targets']:
            output.append(f"    • 目标{target['level']} ({target['time']}): {target['price']}")
        output.append(f"  止损价: {plan['stopLoss']}")
        if 'stopLossReason' in plan:
            output.append(f"  止损原因: {plan['stopLossReason']}")
        output.append(f"  触发条件: {plan['trigger']}")
        output.append("")
    
    # 风险提示
    output.append("⚠️  风险提示")
    output.append("-" * 60)
    for i, risk in enumerate(data['riskWarnings'], 1):
        output.append(f"{i}. {risk['title']}")
        output.append(f"   {risk['content']}")
    output.append("")
    
    output.append("=" * 60)
    
    return "\n".join(output)


def main():
    """主函数"""
    # 原始 AI 分析文本
    raw_text = """###ETH/USDT1小时周期分析####趋势：下跌（短期震荡下行）理由：-**价格走势**：最新价格为3180.64，较前一小时3193.82略微下降（约-0.41%）。-**价格行为**：从近期高点（3500以上）大幅回落，目前处于下行通道内，短期反弹力度较弱。-**技术形态**：近期形成明显的下降趋势线，支撑位在3100-3120附近，压力位在3200-3220附近。####现价：3180.64（**-0.41%**震荡下行）####交易建议：-**方向**：观望或短线轻仓**做空**-**入场方案**：1.**方案1（短线做空）**：-**入场价**:3180-3200-**目标1（3小时）**:3150-**目标2（5小时）**:3120-**目标3（7小时）**:3100-**目标4（10小时）**:3080-**止损价**:3220（突破强阻力）-**触发条件**:若价格反弹至3200受阻并出现回调K线形态（如黄昏星、射击之星）。2.**方案2（低吸做多）**：-**入场价**:3100-3120（支撑区）-**目标1（3小时）**:3150-**目标2（5小时）**:3180-**目标3（7小时）**:3200-**止损价**:3080（跌破关键支撑）-**触发条件**:价格触及支撑区后形成看涨吞没或锤子线。####风险提示：1.**短线快速反转**：ETH波动性较大，可能因市场情绪突变而快速反弹。2.**支撑失效风险**：若3100跌破可能继续下探3050甚至3000。3.**宏观因素干扰**：SEC政策、大额链上转账等可能引发异常波动。（如需更具体的MACD/RSI等指标分析，请补充说明）"""
    
    print("🔄 开始解析 AI 分析文本...\n")
    
    # 解析文本
    parsed_data = parse_ai_analysis(raw_text)
    
    # 输出 JSON 格式
    print("📄 JSON 格式输出:")
    print("-" * 60)
    print(json.dumps(parsed_data, ensure_ascii=False, indent=2))
    print("\n")
    
    # 输出格式化文本
    print("📝 格式化文本输出:")
    print(format_output(parsed_data))
    
    # 保存到文件
    with open('ai_analysis_result.json', 'w', encoding='utf-8') as f:
        json.dump(parsed_data, f, ensure_ascii=False, indent=2)
    
    print("\n✅ 结果已保存到 ai_analysis_result.json")


if __name__ == "__main__":
    main()

